This page last changed on Oct 30, 2007 by carlos.gonzalez.

El proyecto se realizará en dos (2) entregas por un valor total de cuarenta (50) puntos sobre el total de 100 de la asignatura. El contenido y condiciones de cada entrega se describen a continuación.

Entrega 1

Analizador Léxico (Lexer)

El objetivo de esta etapa es producir con Antlr el analizador Léxico que permite obtener los tokens/lexema presentes en los programas SOberon. Para esta entrega deberán:

  • Identificar los componentes léxicos presentes en un programa SOberon.
  • Definir en Antlr el Analizador Léxico que permita descomponer un programa SOberon en los lexemas que lo forman.
  • Escribir una clase de prueba del Analizador Léxico: SOberonCME_Lex con un método principal (main()) el cual reciba como argumento el directorio donde se encuentran los programas SOberon a analizar y produzca en la salida estandard (System.out en Java) la lista de componentes léxicos (tokens) y los lexemas asociados.
  • El directorio con los archivos SOberon debe ser tratado en profundidad (recursivamente).
  • La lista de componentes léxicos debe contener un componente Léxico por línea, en el siguiente formato:
    <lexema>:<identificador_lexico>:<linea>
  • Los posibles errores lexicográficos deben reportarse en la salida estándar de error (System.err en Java) usando el siguiente formato:

error Léxico <archivo> ( n ): <mensaje>

donde <archivo> es el paso al archivo donde se consiguió el error, n es el número de la línea donde se detectó el error, y <mensaje> es la descripción del error encontrado.

Analizador Sintáctico

El objetivo de esta etapa es producir con Antlr el analizador sintáctico que permite construir el árbol de sintaxis abstracta correspondiente a cada archivo SOberon. Para esta entrega deberán:

  • Definir en Antlr el Analizador Sintáctico (Parser) que permita verificar la sintaxis un programa SOberon y adicionalmente producir una estructura de datos con la información del programa requerida para hacer el cálculo de las métricas antes mencionadas.
  • Escribir un programa SOberonCME_Sin con un método principal (main()) el cual reciba como argumento el directorio donde se encuentran los programas SOberon a analizar y produzca como salida un único llamado "arbol.txt" contentivo de la sintaxis abstracta de cada uno de ellos, usando como formato el lenguaje generado por la siguiente gramática en notación BNF:

archivo = nodo
nodo = "(" IDENTIFICADOR listaSubNodos ")"
listaSubNodos = nodo ListaSubNodos | []

La sintaxis abstracta consistirá de un nivel para el proyecto, bajo el cual habrá una entrada para cada módulo indicando el paso al archivo que lo contiene. Bajo la entrada para cada módulo una entrada para cada Operación (rutina). Ejemplo:

(proyecto
(.\etc\data\BigCaps.sob
(main)
(DoName)
(DoAll)
...
)
(.\etc\data\BinaryTree.sob
(main)
(insert)
(Search)
...
)
...
)

  • Reportar los posibles errores sintácticos en la salida estándar de error (System.err) usando el siguiente formato:

error Sintáctico : <archivo> ( n ) : <mensaje>

donde <archivo> es el paso al archivo donde se consiguió el error, n es el número de la línea donde se detectó el error, y <mensaje> es la descripción del error encontrado.

Entrega 2: Verificador Semántico, Tabla de Símbolos y Generador de Métricas

El objetivo de esta etapa es realizar las verificaciones semánticas pertinentes e implementar la tabla de símbolos que maneje la información requerida para calcular las métricas citadas. Para esta entrega deberán:

  • Identificar e implementar las validaciones semánticas que se deben realizar para los programas de entrada.
  • Implementar la clase TablaDeSimbolos que almacena la información correspondiente a los programas SOberon analizados.
  • Modificar el Analizador Léxico y el Analizador Sintáctico de manera que se actualice la tabla de símbolos a medida que se realiza el análisis.
  • Escribir un programa SOberonCME con un método principal (main()) el cual reciba como argumento el directorio donde se encuentran los programas SOberon a analizar y produzca como salida un único llamado "metricas.html" contentivo de las métricas básicas para el proyecto, cada módulo, y cada operación, usando como formato el lenguaje generado por la siguiente gramática en notación BNF:

archivo = nodo
nodo = "(" IDENTIFICADOR LT LDC LC LB listaSubNodos ")"
listaSubNodos = nodo ListaSubNodos | []

donde los terminales LT, LDC, LC y LB son, respectivamente, los valores de las métricas para Líneas totales, Líneas de código, Líneas de comentario y Líneas en blanco.

  • El formato HTML debe aplicarse de la siguiente manera:
    • El contenido del archivo debe estar encerrado entre tags <html> y </html>
    • El archivo debe comenzar por una sección <head> que incluya una subsección <title>.
    • El conjunto de métricas debe estar en una sección <body>.
    • Cada una de las siguientes subsecciones deberán estar encerradas entre tags <blockquote>.
    • El título de la sección principal será "proyecto" y estará encerrado en tags <h1>.
    • Las subsecciones destinadas a los módulos tendrán como título el paso al archivo correspondiente encerrado entre tags <h2>.
    • Las subsecciones correspondientes a las operaciones tendrán como título el nombre de la Operación encerrado entre tags <h3>.
    • El título de cada subsección estará inmediatamente seguido de una tabla de dos filas, y una columna por métrica. La primera fila contendrá los nombres de las métricas usando tags <th>. La segunda fila contendrá los valores de las métricas usando tags <td>. El tag <table> que introduce cada tabla deber? tener un atributo "summary" con valor "métricas".

Pueden encontrar un ejemplo del formato de la salida aquí.

  • Reportar los posibles errores semánticos en la salida estándar de error (System.err) usando el siguiente formato:

error semantico : <archivo> ( n ) : <mensaje>

donde <archivo> es el paso al archivo donde se consiguió el error, n es el número de la línea donde se detectó el error, y <mensaje> es la descripción del error encontrado.


Document generated by Confluence on Oct 04, 2010 11:25